<h1>参数配置</h1>

<p>beego 目前支持 INI、XML、JSON、YAML 格式的配置文件解析，但是默认采用了 INI 格式解析，用户可以通过简单的配置就可以获得很大的灵活性。</p>

<h2>默认配置解析</h2>

<p>beego 默认会解析当前应用下的 <code>conf/app.conf</code> 文件。</p>

<p>通过这个文件你可以初始化很多 beego 的默认参数：</p>

<pre><code>appname = beepkg
httpaddr = &quot;127.0.0.1&quot;
httpport = 9090
runmode =&quot;dev&quot;
autorender = false
recoverpanic = false
viewspath = &quot;myview&quot;
</code></pre>

<p>上面这些参数会替换 beego 默认的一些参数, beego 的参数主要有哪些呢？请参考<a href="https://godoc.org/github.com/astaxie/beego#pkg-constants">https://godoc.org/github.com/astaxie/beego#pkg-constants</a> 。<br />
    BConfig 就是 beego 里面的默认的配置，你也可以直接通过<code>beego.BConfig.AppName=&quot;beepkg&quot;</code>这样来修改，和上面的配置效果一样，只是一个在代码里面写死了，<br />
    而配置文件就会显得更加灵活。</p>

<p>你也可以在配置文件中配置应用需要用的一些配置信息，例如下面所示的数据库信息：</p>

<pre><code>mysqluser = &quot;root&quot;
mysqlpass = &quot;rootpass&quot;
mysqlurls = &quot;127.0.0.1&quot;
mysqldb   = &quot;beego&quot;
</code></pre>

<p>那么你就可以通过如下的方式获取设置的配置信息:</p>

<pre><code>beego.AppConfig.String(&quot;mysqluser&quot;)
beego.AppConfig.String(&quot;mysqlpass&quot;)
beego.AppConfig.String(&quot;mysqlurls&quot;)
beego.AppConfig.String(&quot;mysqldb&quot;)
</code></pre>

<p>AppConfig 的方法如下：</p>

<ul>
    <li>Set(key, val string) error<br /></li>
    <li>String(key string) string<br /></li>
    <li>Strings(key string) []string<br /></li>
    <li>Int(key string) (int, error)<br /></li>
    <li>Int64(key string) (int64, error)<br /></li>
    <li>Bool(key string) (bool, error)<br /></li>
    <li>Float(key string) (float64, error)<br /></li>
    <li>DefaultString(key string, defaultVal string) string<br /></li>
    <li>DefaultStrings(key string, defaultVal []string)<br /></li>
    <li>DefaultInt(key string, defaultVal int) int<br /></li>
    <li>DefaultInt64(key string, defaultVal int64) int64<br /></li>
    <li>DefaultBool(key string, defaultVal bool) bool<br /></li>
    <li>DefaultFloat(key string, defaultVal float64) float64<br /></li>
    <li>DIY(key string) (interface{}, error)<br /></li>
    <li>GetSection(section string) (map[string]string, error)<br /></li>
    <li>SaveConfigFile(filename string) error<br /></li>
</ul>

<p>在使用 ini 类型的配置文件中, key 支持 section::key 模式.</p>

<p>你可以用 Default* 方法返回默认值.</p>

<h3>不同级别的配置</h3>

<p>在配置文件里面支持 section，可以有不同的 Runmode 的配置，默认优先读取 runmode 下的配置信息，例如下面的配置文件：</p>

<pre><code>appname = beepkg
httpaddr = &quot;127.0.0.1&quot;
httpport = 9090
runmode =&quot;dev&quot;
autorender = false
recoverpanic = false
viewspath = &quot;myview&quot;

[dev]
httpport = 8080
[prod]
httpport = 8088
[test]
httpport = 8888
</code></pre>

<p>上面的配置文件就是在不同的 runmode 下解析不同的配置，例如在 dev 模式下，httpport 是 8080，在 prod 模式下是 8088，在 test 模式下是 8888。其他配置文件同理。解析的时候优先解析 runmode 下的配置，然后解析默认的配置。</p>

<p>读取不同模式下配置参数的方法是“模式::配置参数名”，比如：beego.AppConfig.String(&ldquo;dev::mysqluser&rdquo;)。</p>

<p>对于自定义的参数，需使用 beego.GetConfig(typ, key string, defaultVal interface{}) 来获取指定 runmode 下的配置（需 1.4.0 以上版本），typ 为参数类型，key 为参数名, defaultVal 为默认值。</p>

<h3>多个配置文件</h3>

<p>INI 格式配置支持 <code>include</code> 方式，引用多个配置文件，例如下面的两个配置文件效果同上：</p>

<p>app.conf</p>

<pre><code>appname = beepkg
httpaddr = &quot;127.0.0.1&quot;
httpport = 9090

include &quot;app2.conf&quot;
</code></pre>

<p>app2.conf</p>

<pre><code>runmode =&quot;dev&quot;
autorender = false
recoverpanic = false
viewspath = &quot;myview&quot;

[dev]
httpport = 8080
[prod]
httpport = 8088
[test]
httpport = 8888
</code></pre>

<h3>支持环境变量配置</h3>

<p>配置文件解析支持从环境变量中获取配置项，配置项格式：<code>${环境变量}</code>。例如下面的配置中优先使用环境变量中配置的 runmode 和 httpport，如果有配置环境变量 ProRunMode 则优先使用该环境变量值。如果不存在或者为空，则使用 &ldquo;dev&rdquo; 作为 runmode。</p>

<p>app.conf</p>

<pre><code>runmode  = &quot;${ProRunMode||dev}&quot;
httpport = &quot;${ProPort||9090}&quot;
</code></pre>

<h3>系统默认参数</h3>

<p>beego 中带有很多可配置的参数，我们来一一认识一下它们，这样有利于我们在接下来的 beego 开发中可以充分的发挥他们的作用(你可以通过在 <code>conf/app.conf</code> 中设置对应的值，不区分大小写)：</p>

<h4>基础配置</h4>

<ul>
    <li>BConfig<br />
        保存了所有 beego 里面的系统默认参数，你可以通过 <code>beego.BConfig</code> 来访问和修改底下的所有配置信息.<br /></li>
</ul>

<blockquote>
    <blockquote>
        <p>配置文件路径，默认是应用程序对应的目录下的 <code>conf/app.conf</code>，用户可以在程序代码中加载自己的配置文件<br />
            <code>beego.LoadAppConfig(&quot;ini&quot;, &quot;conf/app2.conf&quot;)</code><br />
            也可以加载多个文件，只要你调用多次就可以了，如果后面的文件和前面的 key 冲突，那么以最新加载的为最新值</p>
    </blockquote>
</blockquote>

<h4>App 配置</h4>

<ul>
    <li><p>AppName</p>

        <p>应用名称，默认是 beego。通过 <code>bee new</code> 创建的是创建的项目名。</p>

        <p><code>beego.BConfig.AppName = &quot;beego&quot;</code></p></li>

    <li><p>RunMode</p>

        <p>应用的运行模式，可选值为 <code>prod</code>, <code>dev</code> 或者 <code>test</code>. 默认是 <code>dev</code>, 为开发模式，在开发模式下出错会提示友好的出错页面，如前面错误描述中所述。</p>

        <p><code>beego.BConfig.RunMode = &quot;dev&quot;</code></p></li>

    <li><p>RouterCaseSensitive</p>

        <p>是否路由忽略大小写匹配，默认是 true，区分大小写</p>

        <p><code>beego.BConfig.RouterCaseSensitive = true</code></p></li>

    <li><p>ServerName</p>

        <p>beego 服务器默认在请求的时候输出 server 为 beego。</p>

        <p><code>beego.BConfig.ServerName = &quot;beego&quot;</code></p></li>

    <li><p>RecoverPanic</p>

        <p>是否异常恢复，默认值为 true，即当应用出现异常的情况，通过 recover 恢复回来，而不会导致应用异常退出。</p>

        <p><code>beego.BConfig.RecoverPanic = true</code></p></li>

    <li><p>CopyRequestBody</p>

        <p>是否允许在 HTTP 请求时，返回原始请求体数据字节，默认为 false （GET or HEAD or 上传文件请求除外）。</p>

        <p><code>beego.BConfig.CopyRequestBody = false</code></p></li>

    <li><p>EnableGzip</p>

        <p>是否开启 gzip 支持，默认为 false 不支持 gzip，一旦开启了 gzip，那么在模板输出的内容会进行 gzip 或者 zlib 压缩，根据用户的 Accept-Encoding 来判断。</p>

        <p><code>beego.BConfig.EnableGzip = false</code></p>

        <p>Gzip允许用户自定义压缩级别、压缩长度阈值和针对请求类型压缩:</p>

        <ol>
            <li><p>压缩级别, <code>gzipCompressLevel = 9</code>,取值为 1~9,如果不设置为 1(最快压缩)</p></li>

            <li><p>压缩长度阈值, <code>gzipMinLength = 256</code>,当原始内容长度大于此阈值时才开启压缩,默认为 20B(ngnix默认长度)</p></li>

            <li><p>请求类型, <code>includedMethods = get;post</code>,针对哪些请求类型进行压缩,默认只针对 GET 请求压缩</p></li>
        </ol></li>

    <li><p>MaxMemory</p>

        <p>文件上传默认内存缓存大小，默认值是 <code>1 &lt;&lt; 26</code>(64M)。</p>

        <p><code>beego.BConfig.MaxMemory = 1 &lt;&lt; 26</code></p></li>

    <li><p>EnableErrorsShow</p>

        <p>是否显示系统错误信息，默认为 true。</p>

        <p><code>beego.BConfig.EnableErrorsShow = true</code></p></li>

    <li><p>EnableErrorsRender</p>

        <p>是否将错误信息进行渲染，默认值为 true，即出错会提示友好的出错页面，对于 API 类型的应用可能需要将该选项设置为 false 以阻止在 <code>dev</code> 模式下不必要的模板渲染信息返回。</p></li>
</ul>

<h4>Web配置</h4>

<ul>
    <li><p>AutoRender</p>

        <p>是否模板自动渲染，默认值为 true，对于 API 类型的应用，应用需要把该选项设置为 false，不需要渲染模板。</p>

        <p><code>beego.BConfig.WebConfig.AutoRender = true</code></p></li>

    <li><p>EnableDocs</p>

        <p>是否开启文档内置功能，默认是 false</p>

        <p><code>beego.BConfig.WebConfig.EnableDocs = true</code></p></li>

    <li><p>FlashName</p>

        <p>Flash 数据设置时 Cookie 的名称，默认是 BEEGO_FLASH</p>

        <p><code>beego.BConfig.WebConfig.FlashName = &quot;BEEGO_FLASH&quot;</code></p></li>

    <li><p>FlashSeperator</p>

        <p>Flash 数据的分隔符，默认是 BEEGOFLASH</p>

        <p><code>beego.BConfig.WebConfig.FlashSeparator = &quot;BEEGOFLASH&quot;</code></p></li>

    <li><p>DirectoryIndex</p>

        <p>是否开启静态目录的列表显示，默认不显示目录，返回 403 错误。</p>

        <p><code>beego.BConfig.WebConfig.DirectoryIndex = false</code></p></li>

    <li><p>StaticDir</p>

        <p>静态文件目录设置，默认是static</p>

        <p>可配置单个或多个目录:</p>

        <ol>
            <li><p>单个目录, <code>StaticDir = download</code>. 相当于 <code>beego.SetStaticPath(&quot;/download&quot;,&quot;download&quot;)</code></p></li>

            <li><p>多个目录, <code>StaticDir = download:down download2:down2</code>. 相当于 <code>beego.SetStaticPath(&quot;/download&quot;,&quot;down&quot;)</code> 和 <code>beego.SetStaticPath(&quot;/download2&quot;,&quot;down2&quot;)</code></p></li>
        </ol>

        <p><code>beego.BConfig.WebConfig.StaticDir</code></p></li>

    <li><p>StaticExtensionsToGzip</p>

        <p>允许哪些后缀名的静态文件进行 gzip 压缩，默认支持 .css 和 .js</p>

        <p><code>beego.BConfig.WebConfig.StaticExtensionsToGzip = []string{&quot;.css&quot;, &quot;.js&quot;}</code></p>

        <p>等价 config 文件中</p>

        <pre><code>StaticExtensionsToGzip = .css, .js
</code></pre></li>

    <li><p>TemplateLeft</p>

        <p>模板左标签，默认值是<code>{ {</code>。</p>

<p><code>beego.BConfig.WebConfig.TemplateLeft=&quot;{ {&quot;</code></p></li>

<li><p>TemplateRight</p>

<p>模板右标签，默认值是<code>}}</code>。</p>

        <p><code>beego.BConfig.WebConfig.TemplateRight=&quot;}}&quot;</code></p></li>

    <li><p>ViewsPath</p>

        <p>模板路径，默认值是 views。</p>

        <p><code>beego.BConfig.WebConfig.ViewsPath=&quot;views&quot;</code></p></li>

    <li><p>EnableXSRF</p>

        <p>是否开启 XSRF，默认为 false，不开启。</p>

        <p><code>beego.BConfig.WebConfig.EnableXSRF = false</code></p></li>

    <li><p>XSRFKEY</p>

        <p>XSRF 的 key 信息，默认值是 beegoxsrf。 EnableXSRF＝true 才有效</p>

        <p><code>beego.BConfig.WebConfig.XSRFKEY = &quot;beegoxsrf&quot;</code></p></li>

    <li><p>XSRFExpire</p>

        <p>XSRF 过期时间，默认值是 0，不过期。</p>

        <p><code>beego.BConfig.WebConfig.XSRFExpire = 0</code></p></li>
</ul>

<h4>监听配置</h4>

<ul>
    <li><p>Graceful</p>

        <p>是否开启热升级，默认是 false，关闭热升级。</p>

        <p><code>beego.BConfig.Listen.Graceful=false</code></p></li>

    <li><p>ServerTimeOut</p>

        <p>设置 HTTP 的超时时间，默认是 0，不超时。</p>

        <p><code>beego.BConfig.Listen.ServerTimeOut=0</code></p></li>

    <li><p>ListenTCP4</p>

        <p>监听本地网络地址类型，默认是TCP6，可以通过设置为true设置为TCP4。</p>

        <p><code>beego.BConfig.Listen.ListenTCP4 = true</code></p></li>

    <li><p>EnableHTTP</p>

        <p>是否启用 HTTP 监听，默认是 true。</p>

        <p><code>beego.BConfig.Listen.EnableHTTP = true</code></p></li>

    <li><p>HTTPAddr</p>

        <p>应用监听地址，默认为空，监听所有的网卡 IP。</p>

        <p><code>beego.BConfig.Listen.HTTPAddr = &quot;&quot;</code></p></li>

    <li><p>HTTPPort</p>

        <p>应用监听端口，默认为 8080。</p>

        <p><code>beego.BConfig.Listen.HTTPPort = 8080</code></p></li>

    <li><p>EnableHTTPS</p>

        <p>是否启用 HTTPS，默认是 false 关闭。当需要启用时，先设置 EnableHTTPS = true，并设置 <code>HTTPSCertFile</code> 和 <code>HTTPSKeyFile</code></p>

        <p><code>beego.BConfig.Listen.EnableHTTPS = false</code></p></li>

    <li><p>HTTPSAddr</p>

        <p>应用监听地址，默认为空，监听所有的网卡 IP。</p>

        <p><code>beego.BConfig.Listen.HTTPSAddr = &quot;&quot;</code></p></li>

    <li><p>HTTPSPort</p>

        <p>应用监听端口，默认为 10443</p>

        <p><code>beego.BConfig.Listen.HTTPSPort = 10443</code></p></li>

    <li><p>HTTPSCertFile</p>

        <p>开启 HTTPS 后，ssl 证书路径，默认为空。</p>

        <p><code>beego.BConfig.Listen.HTTPSCertFile = &quot;conf/ssl.crt&quot;</code></p></li>

    <li><p>HTTPSKeyFile</p>

        <p>开启 HTTPS 之后，SSL 证书 keyfile 的路径。</p>

        <p><code>beego.BConfig.Listen.HTTPSKeyFile = &quot;conf/ssl.key&quot;</code></p></li>

    <li><p>EnableAdmin</p>

        <p>是否开启进程内监控模块，默认 false 关闭。</p>

        <p><code>beego.BConfig.Listen.EnableAdmin = false</code></p></li>

    <li><p>AdminAddr</p>

        <p>监控程序监听的地址，默认值是 localhost 。</p>

        <p><code>beego.BConfig.Listen.AdminAddr = &quot;localhost&quot;</code></p></li>

    <li><p>AdminPort</p>

        <p>监控程序监听的地址，默认值是 8088 。</p>

        <p><code>beego.BConfig.Listen.AdminPort = 8088</code></p></li>

    <li><p>EnableFcgi</p>

        <p>是否启用 fastcgi ， 默认是 false。</p>

        <p><code>beego.BConfig.Listen.EnableFcgi = false</code></p></li>

    <li><p>EnableStdIo</p>

        <p>通过fastcgi 标准I/O，启用 fastcgi 后才生效，默认 false。</p>

        <p><code>beego.BConfig.Listen.EnableStdIo = false</code></p></li>
</ul>

<h4>Session配置</h4>

<ul>
    <li><p>SessionOn</p>

        <p>session 是否开启，默认是 false。</p>

        <p><code>beego.BConfig.WebConfig.Session.SessionOn = false</code></p></li>

    <li><p>SessionProvider</p>

        <p>session 的引擎，默认是 memory，详细参见 <code>session 模块</code>。</p>

        <p><code>beego.BConfig.WebConfig.Session.SessionProvider = &quot;&quot;</code></p></li>

    <li><p>SessionName</p>

        <p>存在客户端的 cookie 名称，默认值是 beegosessionID。</p>

        <p><code>beego.BConfig.WebConfig.Session.SessionName = &quot;beegosessionID&quot;</code></p></li>

    <li><p>SessionGCMaxLifetime</p>

        <p>session 过期时间，默认值是 3600 秒。</p>

        <p><code>beego.BConfig.WebConfig.Session.SessionGCMaxLifetime = 3600</code></p></li>

    <li><p>SessionProviderConfig</p>

        <p>配置信息，根据不同的引擎设置不同的配置信息，详细的配置请看下面的引擎设置，详细参见 <a href="zh-CN/module/session.md">session 模块</a></p></li>

    <li><p>SessionCookieLifeTime</p>

        <p>session 默认存在客户端的 cookie 的时间，默认值是 3600 秒。</p>

        <p><code>beego.BConfig.WebConfig.Session.SessionCookieLifeTime = 3600</code></p></li>

    <li><p>SessionAutoSetCookie</p>

        <p>是否开启SetCookie, 默认值 true 开启。</p>

        <p><code>beego.BConfig.WebConfig.Session.SessionAutoSetCookie = true</code></p></li>

    <li><p>SessionDomain</p>

        <p>session cookie 存储域名, 默认空。</p>

        <p><code>beego.BConfig.WebConfig.Session.SessionDomain = &quot;&quot;</code></p></li>
</ul>

<h4>Log配置</h4>

<pre><code>log详细配置，请参见 `logs 模块`。
</code></pre>

<ul>
    <li><p>AccessLogs</p>

        <p>是否输出日志到 Log，默认在 prod 模式下不会输出日志，默认为 false 不输出日志。此参数不支持配置文件配置。</p>

        <p><code>beego.BConfig.Log.AccessLogs = false</code></p></li>

    <li><p>FileLineNum</p>

        <p>是否在日志里面显示文件名和输出日志行号，默认 true。此参数不支持配置文件配置。</p>

        <p><code>beego.BConfig.Log.FileLineNum = true</code></p></li>

    <li><p>Outputs</p>

        <p>日志输出配置，参考 logs 模块，console file 等配置，此参数不支持配置文件配置。</p>

        <p><code>beego.BConfig.Log.Outputs = map[string]string{&quot;console&quot;: &quot;&quot;}</code></p>

        <p>or</p>

        <p><code>beego.BConfig.Log.Outputs[&quot;console&quot;] = &quot;&quot;</code></p></li>
</ul>
